# -*- coding: utf-8 -*-
"""
Created on Fri Sep  2 10:30:11 2022

@author: xiong
"""

from flask import Flask,jsonify,request
import requests
import threading
import time
'''python发布restful服务实例 @author:hutao @date: 2022-04-11 '''
# Flask初始化参数尽量使用你的包名，这个初始化方式是官方推荐的，官方解释：http://flask.pocoo.org/docs/0.12/api/#flask.Flask
server = Flask(__name__)
#处理乱码
server.config['JSON_AS_ASCII']=False

'''使用restful进行get请求，通过请求地址进行传参，其中胡涛是传参 请求地址：http://127.0.0.1:8085/simulation/analysis/胡涛 请求参数：将地址中的胡涛映射到属性字段name上 响应参数： { "code": "200", "data": { "age": 25, "job": "python", "name": "胡涛" }, "msg": "SUCCES" } '''
@server.route('/simulation/analysis/<name>',methods=['get'])
def demo_restful_request(name):
    # 处理业务逻辑
    #name = request.args['name']
    result = {
    "code":"200","msg":"SUCCES","data":{
    "name":name,"age":25,"job":"python"}}
    return jsonify(result)

'''使用rest进行get请求，通过请求拼接参数进行传参，其中name是传参 请求实例：http://127.0.0.1:8085/simulation/analysis?name=胡涛 请求参数：请求地址中的name=胡涛 响应参数： { "code": "200", "data": { "age": 25, "job": "python", "name": "胡涛" }, "msg": "SUCCES" } '''
@server.route('/simulation/analysis',methods=['get'])
def demo_rest_get_request():
    # 处理业务逻辑
    name = request.args['name']
    result = {
    "code":"200","msg":"SUCCES","data":{
    "name":name,"age":25,"job":"python"}}
    return jsonify(result)

'''使用rest进行post请求，通过请求提 json传参，其中name是传参 请求地址：http://127.0.0.1:8085/simulation/analysis 请求参数： { "name":"胡涛", "job":"java" } 响应参数： { "code": "200", "data": { "age": 25, "job": "java", "name": "胡涛" }, "msg": "SUCCES" } '''
@server.route('/simulation/analysis',methods=['post'])
def demo_rest_post_request():
    # 处理业务逻辑
    name = request.json.get('name')
    job = request.json.get('job')
    result = {
    "code":"200","msg":"SUCCES","data":{
    "name":name,"age":25,"job":job}}
    return jsonify(result)
    #nacos注册中心信息

'''将服务注册到注册中心 注册说明：将http://127.0.0.1:8085/**这个服务上的所有服务注册到注册中心，并且起名叫做algorithm-service 其他微服务进行访问时，访问http://algorithm-service/**即可，即其他服务，使用algorithm-service去注册中心，寻找真实的ip地址 例如原本访问 post访问：http://127.0.0.1:8085/simulation/analysis 此时变成 http://algorithm-service/simulation/analysis '''
#nacos服务
def service_register():
    url = "http://10.18.121.188:8848/nacos/v1/ns/instance?serviceName=algorithm-service&ip=127.0.0.1&port=8085"
    res = requests.post(url)
    print("向nacos注册中心，发起服务注册请求，注册响应状态： {}".format(res.status_code))
    #服务检测
def service_beat():
    while True:
        url = "http://10.18.121.188:8848/nacos/v1/ns/instance/beat?serviceName=algorithm-service&ip=127.0.0.1&port=8085"
        res = requests.put(url)
        print("已注册服务，执行心跳服务，续期服务响应状态： {}".format(res.status_code))
        time.sleep(5)
#发布http服务，并且注册到nocos
if __name__ == "__main__":
    service_register()
    #5秒以后，异步执行service_beat()方法
    threading.Timer(5,service_beat).start()
    server.run(port=8085,debug=True)